import { Adjoin } from '@/utils';

/**
 * 邻接矩阵无向图：
 *  - 特点：
 *    - 矩阵 长度 为 顶点 length 的平方
 *    - 矩阵 斜边必然无值
 *    - 矩阵 依据斜边对称
 * 
 *  - 同级可选的无向图交互：
 *    - 未选取状态，所有可达顶点均可点击
 *    - 选取某个顶点后，当前顶点所有可选项均被找出
 *    - 选取多个顶点时，可选项是各个顶点邻接点的并集
 */
const arr = [
//v0 v1 v2 v3 v4
  0, 0, 1, 1, 0, // v0
  0, 0, 0, 1, 1, // v1
  1, 0, 0, 1, 1, // v2
  1, 1, 1, 0, 0, // v3
  0, 1, 1, 0, 0, // v4
]


// 创建矩阵
const demo = new Adjoin(['v0', 'v1', 'v2', 'v3', 'v4'])

// 注册邻接点
demo.setAdjoinVertexs('v0', ['v2', 'v3']);
demo.setAdjoinVertexs('v1', ['v3', 'v4']);
demo.setAdjoinVertexs('v2', ['v0', 'v3', 'v4']);
demo.setAdjoinVertexs('v3', ['v0', 'v1', 'v2']);
demo.setAdjoinVertexs('v4', ['v1', 'v2']);

// 打印
console.log(demo.getAdjoinVertexs('v0'));

// 一般使用 稠密图 来表示 邻接矩阵，使用 稀疏图 来表示邻接表
// 邻接矩阵
const matrixArr = [
//v0 v1 v2 v3 v4
  [0, 0, 1, 1, 0], // v0
  [0, 0, 0, 1, 1], // v1
  [1, 0, 0, 1, 1], // v2
  [1, 1, 1, 0, 0], // v3
  [0, 1, 1, 0, 0], // v4
];

// 邻接表
const graphArr = [
  ['v2', 'v3'],       // v0 
  ['v3', 'v4'],       // v1 
  ['v0', 'v3', 'v4'], // v2 
  ['v0', 'v1', 'v2'], // v3 
  ['v1', 'v2'],       // v4 
]
